"""本地程序测试"""


from lib import *

from flask import Flask,request,make_response,Response

app=Flask(__name__)

from config import users

@app.route("/test",methods=["GET"])
def test():
    un=request.args.get("username")
    if un in users:
        return "OK"
    else:
        return "当前登录用户在服务器上不存在!"


from config import *
def register_submit(result):
    """
    注册一次提交 result中必须指定用户
    :param runid:
    :param result: 提交结果对象 其中必须有username否则无法注册
    :return: 注册结果
    """
    un=result.username
    if un not in users:
        return "指定用户不存在于此系统"
    #注册 0表示提交一题新的 1表示重复提交
    return str(addsubmit(result))

@app.route("/submit",methods=["POST"])
def submit():
    #获取提交参数 runid为唯一证明 此请求相当于请求服务端录入一次AC的提交
    runid=int(request.form["runid"])
    username=request.form["username"]
    pid=int(request.form["pid"])
    code=request.form["code"]
    if runid is not None:
        #验证为Accepted
        res=SubmitResult()
        res.runid=runid
        res.username=username
        res.problem=Problem()
        res.problem.pid=pid
        res.code=code
        res.session=sess.session
        #获取状态
        res.update_state()
        #判断
        if res.state in SubmitResult.AcceptedState:
            #注册一个成功的提交
            ret=register_submit(res)
            return ret
        #返回失败
        return "错误，此提交为失败提交"
    return "错误，参数错误"

from config import submits
@app.route("/submit_list/<username>",methods=["GET"])
def submit_list(username):
    """
    得到一个用户的所有成功提交记录
    :param username: 用户名
    :return: 成功提交的result的pickle值
    """
    import pickle
    if username not in submits:
        return pickle.dumps([])
    lst=submits[username]
    #返回pickle后的字节流
    ret=pickle.dumps(lst)
    return ret

@app.route("/sprob_list/<username>",methods=["GET"])
def sprob_list(username):
    """
    得到一个用户的所有AC的题的记录
    :param username: 用户名
    :return: 成功提交的result的pickle值
    """
    import pickle
    if username not in submit_probs:
        return pickle.dumps([])
    lst=submit_probs[username]
    #返回pickle后的字节流
    ret=pickle.dumps(lst)
    return ret


@app.route("/coin",methods=["GET"])
def getcoin():
    username=request.args.get("username")
    return str(get_coin(username))





@app.route("/list/<pageid>",methods=["GET"])
def list(pageid=1):
    """
    题目列表
    :param pageid: 页
    :return: 题目列表
    """
    import pickle
    return pickle.dumps(get_desc(pageid))

@app.route("/problem/<pid>",methods=["GET"])
def problem(pid):
    import pickle
    return pickle.dumps(get_problem(pid))

@app.route("/userlist",methods=["GET"])
def ulist():
    import  pickle
    return pickle.dumps(users)


app.run(port=8080)